package ioc

import "github.com/gin-gonic/gin"

// 定义ioc对象，也就是ioc的注册表
type IocContainer struct {
	strore map[string]Object
}

// 扩展ioc方法，实现对象的注册
func (i *IocContainer) Registry(obj Object) {
	i.strore[obj.Name()] = obj
}

// 扩展ioc方法，实现通过key，取出value
func (i *IocContainer) Get(key string) Object {
	return i.strore[key]
}

// 实现注册到ioc中对象的初始化
func (i *IocContainer) Init() {
	for _, v := range i.strore {
		v.Init() // 此段代码表示注册到ioc中的对象的初始化
	}
}

// 实现ioc对象中Apihandler对象的路由注册到Root Router
func (i *IocContainer) RouterRegistry(r gin.IRouter) {
	for _, v := range i.strore {
		// 通过类型断言，来调用接口中的方法
		if obj, ok := v.(GinApihandler); ok {
			obj.Registry(r)
		}
	}
}

// 定义接口，包括Registry（注册路由）方法
type GinApihandler interface {
	Registry(r gin.IRouter)
}
